package com.ljf.common.utils;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * 字符串工具类
 *
 * @author LJF
 * @since 2024-01-26
 */
public class StringUtil {

    private StringUtil() {

    }

    /**
     * 判断字符串是否不为空
     *
     * @param data
     * @return
     */
    public static boolean isNotEmpty(String data) {
        return !isEmpty(data);
    }

    /**
     * 判断字符串是否为空
     *
     * @param data
     * @return
     */
    public static boolean isEmpty(String data) {
        return data == null || data.isEmpty();
    }

    /**
     * 判断字符串是否相等
     *
     * @param cs1
     * @param cs2
     * @return
     */
    public static boolean equals(CharSequence cs1, CharSequence cs2) {
        if (cs1 == cs2) {
            return true;
        }
        else if (cs1 != null && cs2 != null) {
            if (cs1.length() != cs2.length()) {
                return false;
            }
            else if (cs1 instanceof String && cs2 instanceof String) {
                return cs1.equals(cs2);
            }
            else {
                int length = cs1.length();
                for(int i = 0; i < length; ++i) {
                    if (cs1.charAt(i) != cs2.charAt(i)) {
                        return false;
                    }
                }
                return true;
            }
        }
        else {
            return false;
        }
    }

    /**
     * 返回一个新字符串, 用给定的定界符连接所有元素
     *
     * @param argResult
     * @param s
     * @return
     */
    public static String join(List<String> argResult, String s) {
        if (CollectionUtil.isEmpty(argResult)) {
            return "";
        }
        return String.join(s, argResult);
    }

    /**
     * 提取字符串前置非数字字符
     *
     * @param str
     * @return
     */
    public static String extractNonDigitPrefix(String str) {
        if (str == null || str.isEmpty()) {
            return "";
        }
        // 使用正则表达式匹配所有非数字字符直到第一个数字出现
        Pattern pattern = Pattern.compile("^[^\\d]*(?=\\d)");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            return matcher.group();
        } else {
            // 如果整个字符串都不含数字，返回整个字符串
            return str;
        }
    }

    /**
     * 正则表达式匹配
     *
     * @param text
     * @param regex
     * @return
     */
    public static boolean matches(String text, String regex) {
        return text.matches(regex);
    }

}
